import axios from 'axios'
import {ElMessage} from 'element-plus'
import {useUserStore} from '@/stores/user'  // 引入 pinia store

// 创建axios实例
const httpInstance = axios.create({
    baseURL: '/api',
    timeout: 5000
})


// axios请求拦截器
httpInstance.interceptors.request.use(config => {
    const userStore = useUserStore()
    if (userStore.token) {
        config.headers[`token`] = userStore.token
    }
    return config
}, e => Promise.reject(e))

// axios响应式拦截器
httpInstance.interceptors.response.use(response => {
    const res = response.data
    console.log('接口返回数据：{}', res)
    // 统一处理响应状态码
    if (res.code === 401) {
        // 401 未授权，跳转到错误页
        window.location.href = '/error'
        return Promise.reject(res) // 确保后续代码不会执行
    }
    // 成功状态判断（兼容 code 200 或 success 标志）
    if (res.code === 200 || res.success) {
        return res.data ?? null // 返回数据，若无数据则返回 null
    }
    // 错误处理
    const errorMsg = res.message || '请求失败'
    ElMessage.error(errorMsg)
    return Promise.reject(new Error(errorMsg)) // 返回标准 Error 对象
}, error => {
    // 网络/状态码等统一错误处理
    if (error.response) {
        const status = error.response.status
        switch (status) {
            case 401:
                ElMessage.error('未授权，请重新登录')
                // 可以做 token 清除等处理
                window.location.href = '/error'
                break
            case 403:
                ElMessage.error('权限不足')
                break
            case 404:
                ElMessage.error('接口地址未找到')
                break
            case 500:
                ElMessage.error('服务器错误')
                break
            default:
                ElMessage.error(error.response.data?.message || '未知错误')
        }
    } else {
        ElMessage.error('请求失败，请检查网络')
    }
    return Promise.reject(error)
})

export default httpInstance
